package cn.net.isir.tasker;

import cn.net.isir.core.SpringApplicationContextUtils;
import cn.net.isir.service2.AlipayOpenAgentFacetofaceSignService;
import cn.net.isir.service2.PaymentService;
import cn.net.isir.utils.StringUtils;
import org.apache.log4j.Logger;

import java.util.*;

/**
 * @author liuxubo
 * @filename AlipaySignHandleTasker.java
 * @package cn.net.isir.tasker
 * @email lxb@isir.net.cn
 * @date 2018/12/03
 * @comment TODO 查询支付宝用户的当面付签约状态
 * @since 1.8
 */
public class AlipaySignHandleTask {
    //声明日志对象
    private static Logger logger = Logger.getLogger(AlipaySignHandleTask.class);
    //计时器
    private static Timer timer = new Timer();
    //任务对象
    private static TimerTask timerTask;
    //店铺列表
//    private static List<String> shopidList = new ArrayList<>();
    //支付方式id
    private static List<String> paymentIdList = new ArrayList();


    //店铺业务类
//    private static ShopService shopService
//            = (ShopService) SpringApplicationContextUtils.getBean("shopService");
    private static PaymentService paymentService
            = (PaymentService) SpringApplicationContextUtils.getBean("paymentService");

    //签约业务类
    private static AlipayOpenAgentFacetofaceSignService alipayOpenAgentFacetofaceSignService
            = (AlipayOpenAgentFacetofaceSignService)
            SpringApplicationContextUtils.getBean("alipayOpenAgentFacetofaceSignService");

    /**
     * 初始化方法
     */
    private static void init() {
        logger.info("AlipaySignHandleTask.init();");
        if (timerTask == null) {
            timerTask = new TimerTask() {
                @Override
                public void run() {
                    logger.info("refresh shop sign status." + new Date().toString());
                    //清空列表
                    paymentIdList.clear();
                    //加载id列表
//                    shopService.selectList(null).forEach(item -> {
//                        //0表示未提交资料，不需要轮询
//                        if ("0".equals(item.getAlipaySignStatus())) {
//                            //跳过本次循环，开始下次循环（相当于普通循环中的continue）
//                            return;
//                        }
//                        //3表示已签约，不需要后续处理了。
//                        if ("3".equals(item.getAlipaySignStatus())) {
//                            //跳过本次循环，开始下次循环（相当于普通循环中的continue）
//                            return;
//                        }
//                        shopidList.add(item.getId());
//                    });
                    paymentService.selectList(null).forEach(item -> {
                        if (StringUtils.isBlank(item.getSignStatus())) {
                            return;
                        }
                        if ("0".equals(item.getSignStatus())) {
                            return;
                        }
                        if ("3".equals(item.getSignStatus())) {
                            return;
                        }
//                        if ("6".equals(item.getSignStatus())) {
//                            return;
//                        }
                        paymentIdList.add(item.getId());
                    });

                    paymentIdList.forEach(item -> logger.info("任务需要更新的支付方式ID[" + item + "]"));
                    //更新列表
                    alipayOpenAgentFacetofaceSignService.updateOpenAgentFacetofaceSignStatus(paymentIdList);
                }
            };
        }
    }

    /**
     * 执行任务
     */
    public static void run() {
        logger.info("AlipaySignHandleTask.run();");
        init();
        //1分钟之后执行第一次，以后每5分钟执行一次
        timer.schedule(timerTask, 6 * 1000, 5 * 6 * 1000);
    }

    /**
     * 取消任务
     */
    public static void cancel() {
        logger.info("AlipaySignHandleTask.cancel();");
        timer.cancel();
    }
}
